#模拟登陆流程：
#1.验证码识别，获取验证码图片的文字数据
#2.对post请求进行发送（处理请求参数）
#3.对响应数据进行持久化存储

import requests
from lxml import etree
from requests.models import Response
from codeclass import KSClient
# 封装识别验证码图片的函数
def getCodeText(imgtext):
    Ks95man = KSClient()	  
    filename=imgtext
    res=None
    if Ks95man.GetTaken('Fatinn','c2100550'):   
        #获取成功,taken获取一次就可以了，taken 生成后如果不用参数"isref=1"刷新，就一直不会变。如果写死在您的软件中，就要慎用"isref=1"，否则您之前写死的软件都要改taken。
        
        #开始识别
        #获取文件二进制流										
        print('识别结果：'+Ks95man.PostPic(filename,1))
        res=Ks95man.PostPic(filename,1)
         #识别报错
        #Ks95man.ReportError(88)
    
    return res
#创建一个session对象
session = requests.Session()
#1.对验证码图片进行捕获和识别
url="http://jwgl.sdust.edu.cn/jsxsd/"
headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'
}
page_text= requests.get(url=url,headers=headers).text
tree= etree.HTML(page_text)
src=tree.xpath('//*[@id="SafeCodeImg"]/@src')[0]

code_img_str='http://jwgl.sdust.edu.cn'+src
code_img_data = requests.get(url=code_img_str,headers=headers).content
with open("./code.jpg",'wb') as fp:
    fp.write(code_img_data)


#使用示例代码对验证码图片进行识别
code_text=getCodeText('code.jpg')
print(code_text)

#post请求发送（模拟登陆）
login_url="http://jwgl.sdust.edu.cn/jsxsd/xk/LoginToXk"
data={
    'encoded': "MjAxOTAxMDgwMjA0%%%Y21qUVEyMTAwNTUw",
    'RANDOMCODE': code_text
}
#使用session进行post请求的发送
response=session.post(url=login_url,headers=headers,data=data)
print(response.status_code)


#爬取个人主页的页面内容
detail_url='http://jwgl.sdust.edu.cn/jsxsd/framework/xsMain.jsp'
#手动Cookie
# headers={
#     'Cookie': 'JSESSIONID=48C5D88C22A6763DE5D6F4D8139970ED'
# }

#使用携带cookie的session进行get请求发送
detail_page_text = session.get(url=detail_url,headers=headers).text
print(detail_page_text)
# with open('geren.jsp','w',encoding='utf-8') as fp:
#     fp.write(detail_page_text)